package my.heap;

/**
 * <p>
 * 堆的接口
 * </p>
 *
 * @author AJun
 * @since 2020/9/11
 */
public interface Heap<E> {

    /**
     * 元素的数量
     *
     * @return 堆中元素数量
     */
    int size();

    /**
     * 是否为空
     *
     * @return true: 空; false: 非空
     */
    boolean isEmpty();

    /**
     * 清空堆中元素
     */
    void clear();

    /**
     * 添加元素
     *
     * @param element 要添加的元素
     */
    void add(E element);

    /**
     * 获得堆顶元素
     *
     * @return 堆顶元素
     */
    E get();

    /**
     * 删除堆顶元素
     *
     * @return 被删除的元素
     */
    E remove();

    /**
     * 删除堆顶元素的同时插入一个新元素
     *
     * @param element 要添加的元素
     * @return 被删除的元素
     */
    E replace(E element);

}
